package com.alan.libapi.business;

import com.alan.libapi.api.ALTcpClient;
import com.alan.libapi.api.IALTcpClient;
import com.alan.libapi.business.dao.CallbackListener;
import com.alan.libapi.model.business.AppVersionInfo;
import com.alan.libapi.model.business.AreaInfo;
import com.alan.libapi.model.business.BankType;
import com.alan.libapi.model.business.BoundBankCard;
import com.alan.libapi.model.business.MySharedWifiProfit;
import com.alan.libapi.model.business.PaidRecord;
import com.alan.libapi.model.business.ResponsedDevice;
import com.alan.libapi.model.business.ResponsedToken;
import com.alan.libapi.model.business.SharedWifiInfo;
import com.alan.libapi.model.business.UserBoundDevice;
import com.alan.libapi.model.business.UserInfo;
import com.alan.libapi.model.business.UserPackageInfo;
import com.alan.libapi.model.business.UserPackageSituation;
import com.alan.libapi.model.business.UserSession;
import com.alan.libapi.model.business.UserToken;
import com.alan.libapi.model.business.WifiMonthProfit;
import com.alan.libapi.model.persistent.ModifyPwdType;

import java.util.List;

/**
 * @className: IBusinessHttp
 * @describtion: IBusinessHttp
 * @author: AlanWang
 * @email: 850267876@qq.com
 * @time: 2016/4/17 18:30
 */
public interface IBusinessHttp {

    /**
     ******************************************************************************************************************
     *<-----------------------------------------以下为Get方式获取信息的API接口--------------------------------------->
     *******************************************************************************************************************
     */

    /**
     * 获取用户信息
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param callbackListener 回调接口 返回用户信息
     */
    void getUserInfo(UserSession userSession, CallbackListener<UserInfo> callbackListener) ;

    /**
     * 获取附近分享的热点列表
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param areaId 用户当前所在的行政区域Id，精确到区（如深圳市宝安区是518101）
     * @param longitude 位置的经度坐标
     * @param latitude 位置的纬度坐标
     * @param callbackListener 回调接口 返回附近分享的热点列表
     */
    void getNearbySharedWifiList(UserSession userSession, int areaId, double longitude, double latitude, CallbackListener<List<SharedWifiInfo>> callbackListener) ;

    /**
     * 获取用户绑定的设备
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param callbackListener 回调接口 返回用户绑定的设备
     */
    void getUserBoundDevice(UserSession userSession, CallbackListener<UserBoundDevice> callbackListener) ;

    /**
     * 获取用户套餐状况
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param callbackListener 回调接口 返回用户套餐状况
     */
    void getUserPackageSituation(UserSession userSession, CallbackListener<UserPackageSituation> callbackListener) ;

    /**
     * 获取我分享的Wifi列表
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param callbackListener 回调接口 返回我分享的Wifi列表
     */
    void getMySharedWifiList(UserSession userSession, CallbackListener<List<SharedWifiInfo>> callbackListener) ;

    /**
     * 获取指定Wifi的基本信息
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param wifiId 需要查询的wifi的Id
     * @param callbackListener 回调接口 返回指定Wifi的基本信息
     */
    void getSharedWifiInfo(UserSession userSession, int wifiId, CallbackListener<SharedWifiInfo> callbackListener) ;

    /**
     * 获取我分享的所有Wifi的收益列表
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param callbackListener 回调接口 返回我分享的所有Wifi的收益列表
     */
    void getMyAllSharedWifiProfitList(UserSession userSession, CallbackListener<List<MySharedWifiProfit>> callbackListener) ;

    /**
     * 获取我分享的指定Wifi的收益列表
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param wifiId 需要查询的wifi的Id
     * @param callbackListener 回调接口 返回我分享的指定Wifi的收益列表
     */
    void getMySpecifyWifiProfitList(UserSession userSession, int wifiId, CallbackListener<List<WifiMonthProfit>> callbackListener) ;

    /**
     * 获取我的支付列表
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param callbackListener 回调接口 返回我的支付列表
     */
    void getMyPaidList(UserSession userSession, CallbackListener<List<PaidRecord>> callbackListener) ;

    /**
     * 获取套餐列表
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param callbackListener 回调接口 返回套餐列表
     */
    void getPackageInfoList(UserSession userSession, CallbackListener<List<UserPackageInfo>> callbackListener) ;

    /**
     * 获取绑定的银行卡列表
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param callbackListener 回调接口 返回绑定的银行卡列表
     */
    void getMyBoundBankCardList(UserSession userSession, CallbackListener<List<BoundBankCard>> callbackListener) ;

    /**
     * 获取APP 版本信息
     * @param appPlatform 当前平台编号，1为Android ， 2为IOS
     * @param callbackListener 回调接口 返回APP 版本信息
     */
    void getAppVersion(int appPlatform, CallbackListener<AppVersionInfo> callbackListener) ;

    /**
     * 通过地址获取行政区域Id
     * @param userSession
     * @param country
     * @param province
     * @param city
     * @param district
     * @param callbackListener
     */
    void getAreaIdByAddress(UserSession userSession, String country, String province, String city, String district, CallbackListener<AreaInfo> callbackListener);



    /**
     *******************************************************************************************************************
     *<-----------------------------------------以下为Post方式提交信息的API接口--------------------------------------->
     ********************************************************************************************************************
     */

    /**
     * 用户提交手机做注册验证
     * @param mobilePhone （不能为空）用户注册用的手机号，提交时该值为手机号的BASE64编码
     * @param callbackListener
     */
    void postPhoneToRegisterVerify(String mobilePhone, CallbackListener<Void> callbackListener) ;

    /**
     * 提交用户注册信息
     * @param userName 昵称，提交时进行BASE64编码
     * @param userPassword 密码，提交时进行MD5加密
     * @param userPhone 接收验证码的手机号，该手机号是发送验证码时向服务器提交的手机号（不能在提交时从输入框获取防止用户修改），提交时需要对手机进行BASE64编码
     * @param verifyCode 验证码
     * @param callbackListener
     */
    void postUserRegister(String userName, String userPassword, String userPhone, String verifyCode, CallbackListener<UserSession> callbackListener) ;

    /**
     * 用户登录
     * @param userAccount 帐号，目前只允许手机号登录，提交时进行BASE64编码
     * @param userPassword 密码，提交时进行MD5加密
     * @param callbackListener
     */
    void postUserLogin(String userAccount, String userPassword, CallbackListener<UserSession> callbackListener) ;

    /**
     * 用户修改密码前做身份验证（找回密码，修改密码）
     * @param userPhone 用户注册用的手机号登录，提交时进行BASE64编码
     * @param callbackListener
     */
    void postPhoneToModifyPassword(ModifyPwdType typeTag, String userPhone, CallbackListener<Void> callbackListener) ;

    /**
     * 用户修改密码前做身份验证，发送手机收到的验证码
     * @param userPhone 用户注册用的手机号登录，提交时进行BASE64编码
     * @param verifyCode 手机收到的验证码
     * @param callbackListener
     */
    void postVerifyCodeToModifyPassword(ModifyPwdType typeTag, String userPhone, String verifyCode, CallbackListener<UserToken> callbackListener) ;

    /**
     * 用户重置登录密码
     * @param userId 通过身份验证后的用户Id
     * @param userPassword 用户要求重置的新密码，提交时MD5加密
     * @param token 通过手机验证后取得的电子令牌
     * @param callbackListener
     */
    void postNewPasswordToModifyLoginPassword(int userId, String userPassword, String token, CallbackListener<Void> callbackListener) ;

    /**
     * 用户绑定设备
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param deviceMac 用户购买的设备的Mac地址的MD5加密值
     * @param callbackListener
     */
    void postBindDevice(UserSession userSession, String deviceMac, CallbackListener<ResponsedDevice> callbackListener) ;

    /**
     * 解绑设备
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param deviceId 用户购买的设备的唯一Id（一期只允许用户绑定一个设备，该值可以不使用）
     * @param callbackListener
     */
    void postUnbindDevice(UserSession userSession, int deviceId, CallbackListener<Void> callbackListener) ;

    /**
     * 增加分享的Wifi
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param wifiSSID wifiSSID的BASE64编码
     * @param wifiPassword wifi密码的BASE64编码
     * @param wifiMac wifiMac地址的MD5值
     * @param wifiLongitude wifi的位置经度坐标
     * @param wifiLatitude wifi的位置纬度坐标
     * @param wifiAreaId wifi位置所在行政区域的区域编号
     * @param wifiAddress wifi位置所在行政区域
     * @param callbackListener
     */
    void postAddWifi(UserSession userSession, String wifiSSID, String wifiPassword, String wifiMac,double wifiLongitude,
                     double wifiLatitude, int wifiAreaId, String wifiAddress, CallbackListener<Void> callbackListener) ;

    /**
     * 删除分享的Wifi
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param wifiId 需要删除的wifi的Id
     * @param callbackListener
     */
    void postDeleteWifi(UserSession userSession, int wifiId, CallbackListener<Void> callbackListener) ;

    /**
     * 更新分享的Wifi
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param wifiId 需要更新的wifi的Id
     * @param wifiSSID wifiSSID的BASE64编码
     * @param wifiPassword wifi密码的BASE64编码
     * @param wifiLongitude wifi的位置经度坐标
     * @param wifiLatitude wifi的位置纬度坐标
     * @param wifiAreaId wifi位置所在行政区域的区域编号
     * @param wifiAddress wifi位置所在行政区域
     * @param callbackListener
     */
    void postUpdateWifi(UserSession userSession, int wifiId, String wifiSSID, String wifiPassword, double wifiLongitude,
                        double wifiLatitude, int wifiAreaId, String wifiAddress, CallbackListener<Void> callbackListener) ;

    /**
     * 重置支付密码
     * @param userId 通过身份验证后的用户Id
     * @param userPassword 用户要求重置的新密码，提交时MD5加密
     * @param token 通过手机验证后取得的电子令牌
     * @param callbackListener
     */
    void postNewPasswordToModifyPayPassword(int userId, String userPassword, String token, CallbackListener<Void> callbackListener) ;

    /**
     * 购买用网套餐，支付成功后向服务器提交
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param packageType 购买的套餐类型
     * @param count 购买的套餐数量
     * @param totalPrice 支付的总金额
     * @param callbackListener
     */
    void postBuyPackage(UserSession userSession, int packageType, int count, float totalPrice, CallbackListener<Void> callbackListener) ;

    /**
     * 获取银行卡类型
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param accountNum 银行卡号的BASE64编码
     * @param callbackListener
     */
    void postBindBankCardForBankType(UserSession userSession, String accountNum, CallbackListener<BankType> callbackListener) ;

    /**
     * 提交银行卡号验证银行卡持卡人身份信息
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param cardholderName 持卡人姓名的BASE64编码
     * @param cardholderPhone 持卡人手机号的BASE64编码
     * @param accountNum 银行卡号的BASE64编码
     * @param bankType 银行类型
     * @param callbackListener
     */
    void postBindBankCardToVerifyIdentity(UserSession userSession, String cardholderName,
                                          String cardholderPhone, String accountNum, int bankType, CallbackListener<Void> callbackListener) ;

    /**
     * 提交银行卡号获取验证码
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param cardholderPhone 持卡人手机号的BASE64编码
     * @param accountNum 银行卡号的BASE64编码
     * @param callbackListener
     */
    void postBindBankCardForVerifyCode(UserSession userSession, String cardholderPhone, String accountNum, CallbackListener<ResponsedToken> callbackListener) ;

    /**
     * 提交验证码绑定银行卡
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param cardholderPhone 持卡人手机号的BASE64编码
     * @param accountNum 银行卡号的BASE64编码
     * @param token 验证通过后的令牌
     * @param callbackListener
     */
    void postBindBankCardWithVerifyCode(UserSession userSession, String cardholderPhone, String accountNum, String token, CallbackListener<Void> callbackListener) ;

    /**
     * 获取解绑银行卡身份验证
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param payPassword 支付密码的MD5值
     * @param callbackListener
     */
    void postUnbindBankCardForVerify(UserSession userSession, String payPassword, CallbackListener<ResponsedToken> callbackListener) ;

    /**
     * 解绑银行卡
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param accountNum 银行卡号的BASE64编码
     * @param token 验证通过后的令牌
     * @param callbackListener
     */
    void postUnbindBankCard(UserSession userSession, String accountNum, String token, CallbackListener<Void> callbackListener) ;

    /**
     * 设置默认提现银行卡
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param accountNum 银行卡号的BASE64编码
     * @param callbackListener
     */
    void postSetDefaultBankCard(UserSession userSession, String accountNum, CallbackListener<Void> callbackListener) ;

    /**
     * 提现余额到银行卡
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param accountNum 银行卡号的BASE64编码
     * @param outMoney 提现金额
     * @param callbackListener
     */
    void postOutMoney(UserSession userSession, String accountNum, float outMoney, CallbackListener<Void> callbackListener) ;

    /**
     * 修改用户昵称
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param userName 用户昵称的BASE64编码
     * @param callbackListener
     */
    void postModifyUserName(UserSession userSession, String userName, CallbackListener<Void> callbackListener) ;

    /**
     * 提交用户反馈
     * @param userSession 用户会话，包含用户ID及登录成功的会话密钥
     * @param appPlatform 平台号1：Android       2：IOS
     * @param appVersionCode App版本号
     * @param feedbackContent 用户反馈的内容
     * @param time 提交时的unix时间戳
     * @param callbackListener
     */
    void postUserFeedback(UserSession userSession, int appPlatform, int appVersionCode, String feedbackContent, long time, CallbackListener<Void> callbackListener) ;
}
